package cn.z2huo.core.lang.id;

import cn.z2huo.core.lang.Snowflake;
import cn.z2huo.core.util.IdUtils;

/**
 * <p>ID 相关常量
 *
 * @author z2huo
 */
public final class IdConstants {

    private IdConstants() {
    }

    /**
     * <p>默认的数据中心 ID
     *
     * <p>此常量通过调用 {@link IdUtils#getDataCenterId(long)} 方法，传入 {@link Snowflake#MAX_DATA_CENTER_ID} 作为参数，
     * 来获取一个默认的数据中心 ID。它在系统中作为一个全局配置使用，标识系统默认运行在一个最大数据中心 ID 限定的环境中。
     *
     * @see IdUtils#getDataCenterId(long)
     * @see Snowflake#MAX_DATA_CENTER_ID
     */
    public static final long DEFAULT_DATACENTER_ID = IdUtils.getDataCenterId(Snowflake.MAX_DATA_CENTER_ID);

    /**
     * <p>默认的 Worker ID
     *
     * <p>这个静态常量是通过调用 IdUtil 的 getWorkerId 方法，使用默认的数据中心 ID 和 Snowflake 算法允许的最大 Worker ID 来获取的。
     *
     * @see IdUtils#getWorkerId(long, long) 获取Worker ID 的具体实现方法
     * @see Snowflake#MAX_WORKER_ID 雪花算法中定义的最大 Worker ID
     */
    public static final long DEFAULT_WORKER_ID = IdUtils.getWorkerId(DEFAULT_DATACENTER_ID, Snowflake.MAX_WORKER_ID);

    /**
     * <p>默认的 Snowflake 单例，使用默认的 Worker ID 和数据中心 ID
     * <p>传入 {@link #DEFAULT_WORKER_ID} 和 {@link #DEFAULT_DATACENTER_ID} 作为参数。
     * <p>此单例对象保证在同一 JVM 实例中获取 ID 唯一，唯一性使用进程 ID 和 MAC 地址保证。
     */
    public static final Snowflake DEFAULT_SNOWFLAKE = new Snowflake(DEFAULT_WORKER_ID, DEFAULT_DATACENTER_ID);

}
